package com.ruoyi.web.controller.api;

import java.util.List;
import java.util.ArrayList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.system.domain.estate.News;
import com.ruoyi.system.service.estate.INewsService;
import com.ruoyi.common.annotation.Anonymous;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 资讯信息API Controller
 * 
 * @author ruoyi
 */
@RestController
@RequestMapping("/api/news")
public class NewsApiController extends BaseController {
    
    private static final Logger logger = LoggerFactory.getLogger(NewsApiController.class);
    
    @Autowired
    private INewsService newsService;
    
    /**
     * 获取资讯列表
     */
    @Anonymous
    @GetMapping("/list")
    public TableDataInfo list(News news) {
        startPage();
        // 设置查询条件：状态正常，已发布
        news.setStatus("0");
        news.setNewsStatus("1"); // 已发布
        List<News> list = newsService.selectNewsList(news);
        return getDataTable(list);
    }
    
    /**
     * 获取资讯详情
     */
    @Anonymous
    @GetMapping("/{newsId}")
    public AjaxResult getInfo(@PathVariable("newsId") Long newsId) {
        return AjaxResult.success(newsService.selectNewsById(newsId));
    }
    
    /**
     * 获取推荐资讯列表
     */
    @Anonymous
    @GetMapping("/recommend")
    public AjaxResult getRecommendList() {
        List<News> resultList = new ArrayList<>();
        
        // 首先获取置顶的资讯
        News topNews = new News();
        topNews.setStatus("0");
        topNews.setNewsStatus("1"); // 已发布
        topNews.setIsTop("1");
        List<News> topList = newsService.selectNewsList(topNews);
        if (topList != null && !topList.isEmpty()) {
            resultList.addAll(topList);
        }
        
        // 如果置顶资讯不足3条，再获取最新的资讯补充
        if (resultList.size() < 3) {
            News latestNews = new News();
            latestNews.setStatus("0");
            latestNews.setNewsStatus("1"); // 已发布
            latestNews.setNewsType("0"); // 社区动态
            // 按创建时间倒序排序，获取最新的资讯
            List<News> latestList = newsService.selectNewsList(latestNews);
            if (latestList != null && !latestList.isEmpty()) {
                // 过滤掉已经添加的置顶资讯
                for (News news : latestList) {
                    boolean exists = false;
                    for (News existingNews : resultList) {
                        if (existingNews.getNewsId().equals(news.getNewsId())) {
                            exists = true;
                            break;
                        }
                    }
                    if (!exists) {
                        resultList.add(news);
                        if (resultList.size() >= 3) {
                            break;
                        }
                    }
                }
            }
        }
        
        // 如果没有数据，返回空列表而不是null
        if (resultList.isEmpty()) {
            logger.info("没有找到推荐资讯数据");
        }
        
        return AjaxResult.success(resultList);
    }
    
    /**
     * 获取通知公告列表
     */
    @Anonymous
    @GetMapping("/notices")
    public AjaxResult getNoticeList() {
        List<News> resultList = new ArrayList<>();
        
        // 获取通知公告类型的资讯
        News noticeNews = new News();
        noticeNews.setStatus("0");
        noticeNews.setNewsStatus("1"); // 已发布
        noticeNews.setNewsType("1"); // 通知公告
        
        // 首先获取置顶的通知公告
        noticeNews.setIsTop("1");
        List<News> topList = newsService.selectNewsList(noticeNews);
        if (topList != null && !topList.isEmpty()) {
            resultList.addAll(topList);
        }
        
        // 如果置顶通知公告不足3条，再获取最新的通知公告补充
        if (resultList.size() < 3) {
            noticeNews.setIsTop(null);
            // 按创建时间倒序排序，获取最新的通知公告
            List<News> latestList = newsService.selectNewsList(noticeNews);
            if (latestList != null && !latestList.isEmpty()) {
                // 过滤掉已经添加的置顶通知公告
                for (News news : latestList) {
                    boolean exists = false;
                    for (News existingNews : resultList) {
                        if (existingNews.getNewsId().equals(news.getNewsId())) {
                            exists = true;
                            break;
                        }
                    }
                    if (!exists) {
                        resultList.add(news);
                        if (resultList.size() >= 3) {
                            break;
                        }
                    }
                }
            }
        }
        
        // 如果没有数据，返回空列表而不是null
        if (resultList.isEmpty()) {
            logger.info("没有找到通知公告数据");
        }
        
        return AjaxResult.success(resultList);
    }
    
    /**
     * 获取社区动态列表
     */
    @Anonymous
    @GetMapping("/community")
    public AjaxResult getCommunityList() {
        List<News> resultList = new ArrayList<>();
        
        // 获取社区动态类型的资讯
        News communityNews = new News();
        communityNews.setStatus("0");
        communityNews.setNewsStatus("1"); // 已发布
        communityNews.setNewsType("0"); // 社区动态
        
        // 首先获取置顶的社区动态
        communityNews.setIsTop("1");
        List<News> topList = newsService.selectNewsList(communityNews);
        if (topList != null && !topList.isEmpty()) {
            resultList.addAll(topList);
        }
        
        // 如果置顶社区动态不足3条，再获取最新的社区动态补充
        if (resultList.size() < 3) {
            communityNews.setIsTop(null);
            // 按创建时间倒序排序，获取最新的社区动态
            List<News> latestList = newsService.selectNewsList(communityNews);
            if (latestList != null && !latestList.isEmpty()) {
                // 过滤掉已经添加的置顶社区动态
                for (News news : latestList) {
                    boolean exists = false;
                    for (News existingNews : resultList) {
                        if (existingNews.getNewsId().equals(news.getNewsId())) {
                            exists = true;
                            break;
                        }
                    }
                    if (!exists) {
                        resultList.add(news);
                        if (resultList.size() >= 3) {
                            break;
                        }
                    }
                }
            }
        }
        
        // 如果没有数据，返回空列表而不是null
        if (resultList.isEmpty()) {
            logger.info("没有找到社区动态数据");
        }
        
        return AjaxResult.success(resultList);
    }
} 